package NoteBook01;

import org.junit.Test;

/**
 *
 * 2021年6月8日 下午2:32:53
 *
 */
public class StaticTest {
    /**
     * static 表示静态资源与实例无关，只和类相关
     * Java源文件编译生成一个class文件，Java程序在执行的时候，会先将class文件读取到JVM中（类的加载），
     * 在Java的执行过程中，类只会加载一次，static的静态资源只会有一份。
     * 静态资源只和类相关，直接通过类进行访问即可，无需创建新的实例对象。
     * 
     */
	
	
 @Test
 public void call() {
	 //atrl+2,l
	 Moo m1 = new Moo();
	 System.out.println(m1.getX()+","+m1.getY());
	 Moo m2 = new Moo();
	 System.out.println(m2.getX()+","+m2.getY());
	 Moo m3 = new Moo();
	 System.out.println(m3.getX()+","+m3.getY());
	 Moo m4 = new Moo();
	 System.out.println(m4.getX()+","+m4.getY());
	 
	 Moo.staticMethod();
 }
}

class Moo{
	public static int x;
	private int y;
	
	/**
	 * 静态代码块：类加载的时候执行，通常在工具类中使用静态块初始化资源。
	 * 自动执行：无需调用
	 */
	
	static {
		System.out.println("静态代码块执行...");
	}
	
	/**
	 * 静态方法：
	 *  
	 * 1) 静态方法中只能直接访问当前类的静态资源
	 * 
	 * 2) 静态方法中不能使用this或者super关键字
	 * 
	 * 3) 静态方法通常作为工具方法进行声明
	 * 
	 */
	public static void staticMethod() {
		System.out.println("静态方法...");
	}
	public Moo() {
		System.out.println("构造器执行...");
		x++;
		y++;
	}

	/**
	 * @return the x
	 */
	public static int getX() {
		return x;
	}

	/**
	 * @return the y
	 */
	public int getY() {
		return y;
	}
}
